package com.share.example.stock.service.impl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.share.common.utils.*;
import com.share.example.stock.enums.ApiEnum;
import com.share.example.stock.model.ak.*;
import com.share.example.stock.model.db.SectorDetail;
import com.share.example.stock.model.db.SectorSpot;
import com.share.example.stock.service.AkService;
import com.share.example.stock.service.ISectorSpotService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.*;

@Slf4j
@Service
public class AkServiceImpl implements AkService {
    @Autowired
    private ISectorSpotService iSectorSpotService;

    @Value("${aktools_root_url}")
    private String akRootUrl = "http://aktools.snyq.ltd:10301/api/public";

    public static void main(String[] args) {
        AkServiceImpl akHttpService = new AkServiceImpl();
        List<Object> list = akHttpService.requestAktools(ApiEnum.stock_zh_a_minute, null, Object.class);
        DbUtil.listToInsertBatch(ApiEnum.stock_zh_a_minute.getCode(), list);
    }

    private <T> List<T> requestAktools(ApiEnum api, Map<String, Object> param, Class<T> clazz) {
        String res = null;
        List<T> reList = new LinkedList<>();
        long start = System.currentTimeMillis();
        String strParam = ParamUtil.mapToKv(param);
        String url = akRootUrl + "/" + api.getCode() + (StringUtils.isEmpty(strParam) ? "" : "?" + strParam);
        try {
            res = HttpUtil.get(url, api.getTimeOut());
            if (StringUtils.isNotEmpty(res)) {
                //输入为null,转json输出也为空
                reList = JSON.parseArray(res, clazz);
                if (CollectionUtils.isEmpty(reList)) {
                    long end = System.currentTimeMillis();
                    log.info("接口返回null,耗时={},url={}, res={}", (end - start) / 1000, url, res);
                }
            } else {
                long end = System.currentTimeMillis();
                log.info("接口返回null,耗时={},url={}, res={}", (end - start) / 1000, url, res);
            }
        } catch (Exception e) {
            long end = System.currentTimeMillis();
            log.error("接口调用异常,耗时={},url={}, res={}", (end - start) / 1000, url, res, e);
        }
        return reList;
    }

    //目标地址: http://quote.eastmoney.com/center/gridlist.html#hs_a_board
    //
    //描述: 东方财富网-沪深京 A 股-实时行情数据
    @Override
    public List<ZhASpotEm> stock_zh_a_spot_em() {
        List<JSONObject> dataList = requestAktools(ApiEnum.stock_zh_a_spot_em, null, JSONObject.class);
        /*返回的数据结构如下
         [{
         {
        "序号": 1,
        "代码": "001373",
        "名称": "C翔腾",
        "最新价": 61.94,
        "涨跌幅": 34.51,
        "涨跌额": 15.89,
        "成交量": 133744.0,
        "成交额": 702987361.97,
        "振幅": 51.66,
        "最高": 68.88,
        "最低": 45.09,
        "今开": 45.09,
        "昨收": 46.05,
        "量比": 1.15,
        "换手率": 77.89,
        "市盈率-动态": 105.2,
        "市净率": 4.86,
        "总市值": 4254465843.0,
        "流通市值": 1063616461.0,
        "涨速": -0.1,
        "5分钟涨跌": -0.58,
        "60日涨跌幅": 114.1,
        "年初至今涨跌幅": 114.1
         }]*/

        //3.提取数据
        List<ZhASpotEm> insertlist = new LinkedList<>();
        for (JSONObject item : dataList) {
            ZhASpotEm record = new ZhASpotEm();
            record.setSeq(item.getString("序号"));
            record.setCode(item.getString("代码"));
            record.setName(item.getString("名称"));
            record.setLastPrice(item.getDouble("最新价"));
            record.setRiseOrFallRate(item.getDouble("涨跌幅"));
            record.setRiseOrFallPrice(item.getDouble("涨跌额"));
            record.setVolume(item.getLong("成交量"));
            record.setAmount(item.getDouble("成交额"));
            record.setAmplitude(item.getDouble("振幅"));
            record.setHigh(item.getDouble("最高"));
            record.setLow(item.getDouble("最低"));
            record.setOpen(item.getDouble("今开"));
            record.setYclose(item.getDouble("昨收"));
            record.setQuantityRelativeRatio(item.getDouble("量比"));
            record.setPriceToBookRatio(item.getDouble("换手率"));
            record.setPriceToBookRatioDynamic(item.getDouble("市盈率-动态"));
            record.setTurnoverRate(item.getDouble("市净率"));
            record.setTotalCapital(item.getDouble("总市值"));
            record.setFloatingCapital(item.getDouble("流通市值"));
            record.setIncreasingSpeed(item.getDouble("涨速"));
            record.setRiseOrFallRate5m(item.getDouble("5分钟涨跌"));
            record.setRiseOrFallRate60d(item.getDouble("60日涨跌幅"));
            record.setRiseOrFallPrice1y(item.getDouble("年初至今涨跌幅"));

            insertlist.add(record);
        }
        return insertlist;
    }

    //目标地址: https://quote.eastmoney.com/concept/sh603777.html?from=classic(示例)
    //
    //描述: 东方财富-沪深京 A 股日频率数据; 历史数据按日频率更新, 当日收盘价请在收盘后获取
    //返回昨天之前的数据（不包含今天）
    @Override
    public List<ZhAHist> stock_zh_a_hist(String code, String period, String startDate, String endDate, String adjust) {
        //1.获取接口数据
        Map<String, Object> param = new HashMap<>();
        param.put("symbol", code);//symbol		symbol='603777'; 股票代码可以在 ak.stock_zh_a_spot_em() 中获取
        if (StringUtils.isEmpty(period)) {
            period = "daily";
        }
        param.put("period", period);//period  choice of {'daily', 'weekly', 'monthly'}

        if (StringUtils.isEmpty(startDate)) {
            startDate = "20100101";
        }
        param.put("start_date", startDate.replaceAll("-", ""));//start_date		start_date='20210301'; 开始查询的日期

        if (StringUtils.isEmpty(endDate)) {
            endDate = DateExtUtil.getDate();
        }
        param.put("end_date", endDate.replaceAll("-", ""));//end_date		start_date='20210301'; 结束查询的日期

        if (StringUtils.isEmpty(adjust)) {
            adjust = "hfq";
        }
        param.put("adjust", adjust);//adjust		默认返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据
        List<JSONObject> dataList = requestAktools(ApiEnum.stock_zh_a_hist, param, JSONObject.class);
        /** 返回的数据结构如下
         * [{
         *         "时间": "2023-06-02 14:55:00",
         *         "开盘": 11.93,
         *         "收盘": 11.92,
         *         "最高": 11.94,
         *         "最低": 11.92,
         *         "涨跌幅": -0.08,
         *         "涨跌额": -0.01,
         *         "成交量": 33296,
         *         "成交额": 39712802.0,
         *         "振幅": 0.17,
         *         "换手率": 0.02
         *     }]
         */

        //3.提取数据
        List<ZhAHist> insertlist = new LinkedList<>();
        for (JSONObject item : dataList) {
            ZhAHist record = new ZhAHist();
            record.setCode(code);
            record.setDate(item.getString("日期"));
            record.setOpen(item.getDouble("开盘"));
            record.setClose(item.getDouble("收盘"));
            record.setHigh(item.getDouble("最高"));
            record.setLow(item.getDouble("最低"));
            record.setVolume(item.getLong("成交量"));
            record.setPrice(item.getDouble("成交额"));
            record.setAmplitude(item.getDouble("振幅"));
            record.setRiseOrFallRate(item.getDouble("涨跌幅"));
            record.setRiseOrFallPrice(item.getDouble("涨跌额"));
            record.setTurnoverRate(item.getDouble("换手率"));

            insertlist.add(record);
        }
        return insertlist;
    }

    //目标地址: http://quote.eastmoney.com/concept/sh603777.html?from=classic
    //
    //描述: 东方财富-股票行情-盘前数据
    @Override
    public List<ZhAHistPreMinEm> stock_zh_a_hist_pre_min_em(String code, String startDate, String endDate) {
        //1.获取接口数据
        Map<String, Object> param = new HashMap<>();
        param.put("symbol", code);//symbol	str	symbol='000300'; 股票代码
        param.put("start_date", null);//start_date	str	start_date="1979-09-01 09:32:00"; 日期时间; 默认返回所有数据
        param.put("end_date", null);//end_date	str	end_date="2222-01-01 09:32:00"; 日期时间; 默认返回所有数据
        List<JSONObject> dataList = requestAktools(ApiEnum.stock_zh_a_hist_pre_min_em, param, JSONObject.class);
        /** 返回的数据结构如下
         * [ {
         *             {
         *         "时间": "2023-06-02 14:59:00",
         *         "开盘": 11.93,
         *         "收盘": 11.93,
         *         "最高": 11.93,
         *         "最低": 11.93,
         *         "成交量": 0,
         *         "成交额": 0.0,
         *         "最新价": 11.838
         *     }]
         */

        //3.提取数据
        List<ZhAHistPreMinEm> insertlist = new LinkedList<>();
        for (JSONObject item : dataList) {
            ZhAHistPreMinEm record = new ZhAHistPreMinEm();
            record.setCode(code);
            String datetime = item.getString("时间");
            String datetimeArr[] = datetime.split(" ");
            record.setDate(datetimeArr[0]);
            record.setTime(datetimeArr[1]);
            record.setOpen(item.getDouble("开盘"));
            record.setClose(item.getDouble("收盘"));
            record.setHigh(item.getDouble("最高"));
            record.setLow(item.getDouble("最低"));
            record.setVolume(item.getLong("成交量"));
            record.setPrice(item.getDouble("成交额"));
            record.setLastPrice(item.getDouble("最新价"));
//            record.set(item.getDouble("换手率"));

            insertlist.add(record);
        }
        return insertlist;
    }

    //目标地址: http://quote.eastmoney.com/concept/sh603777.html?from=classic
    //
    //描述: 东方财富网-行情首页-沪深京 A 股-每日分时行情; 该接口只能获取近期的分时数据，注意时间周期的设置
    @Override
    public List<ZhAHistMinEm> stock_zh_a_hist_min_em(String symbol, String startDate, String endDate, String period, String adjust) {
        //1.获取接口数据
        Map<String, Object> param = new HashMap<>();
        param.put("symbol", symbol);//symbol	 	symbol='sh000300'; 股票代码
        param.put("start_date", null);//start_date	 start_date="1979-09-01 09:32:00"; 日期时间; 默认返回所有数据
        param.put("end_date", null);//end_date	 	end_date="2222-01-01 09:32:00"; 日期时间; 默认返回所有数据
        param.put("period", "5");//period	  choice of {'1', '5', '15', '30', '60'}; 其中 1 分钟数据返回近 5 个交易日数据且不复权
        param.put("adjust", "hfq");//adjust  choice of {'', 'qfq', 'hfq'}; '': 不复权, 'qfq': 前复权, 'hfq': 后复权, 其中 1 分钟数据返回近 5 个交易日数据且不复权
        List<JSONObject> dataList = requestAktools(ApiEnum.stock_zh_a_hist_min_em, param, JSONObject.class);
        /** 返回的数据结构如下
         * [ {
         *             "时间": "2023-06-02 14:55:00",
         *                 "开盘": 11.93,
         *                 "收盘": 11.92,
         *                 "最高": 11.94,
         *                 "最低": 11.92,
         *
         *                 "涨跌幅": -0.08,
         *                 "涨跌额": -0.01,
         *
         *                 "成交量": 33296,
         *                 "成交额": 39712802.0,
         *                 "振幅": 0.17,
         *                 "换手率": 0.02
         *         }]
         */

        //3.提取数据
        List<ZhAHistMinEm> insertlist = new LinkedList<>();
        for (JSONObject item : dataList) {
            ZhAHistMinEm record = new ZhAHistMinEm();
            String[] arr = StrUtil.splitNumericAndAlphabet(symbol);
            record.setCode(arr[1]);
            String datetime = item.getString("时间");
            String datetimeArr[] = datetime.split(" ");
            record.setDate(datetimeArr[0]);
            record.setTime(datetimeArr[1]);
            record.setOpen(item.getDouble("开盘"));
            record.setClose(item.getDouble("收盘"));
            record.setHigh(item.getDouble("最高"));
            record.setLow(item.getDouble("最低"));

            record.setRiseOrFallRate(item.getDouble("涨跌幅"));
            record.setRiseOrFallPrice(item.getDouble("涨跌额"));
            record.setVolume(item.getLong("成交量"));
            record.setPrice(item.getDouble("成交额"));
            record.setAmplitude(item.getDouble("振幅"));
            record.setTurnover(item.getDouble("换手率"));

            insertlist.add(record);
        }
        return insertlist;
    }

    //目标地址: http://finance.sina.com.cn/stock/sl/
    //
    //描述: 新浪行业-板块行情
    @Override
    public List<SectorSpot> stock_sector_spot(String indicator, String strCurDate) {
        Map<String, Object> param = new HashMap<>();
        param.put("indicator", indicator);
        List<JSONObject> dataList = requestAktools(ApiEnum.stock_sector_spot, param, JSONObject.class);
        /*返回的数据结构如下
        [
        {
        "label": "new_blhy",
        "板块": "玻璃行业",
        "公司家数": 19,
        "平均价格": 13.5331578947,
        "涨跌额": 0.2373684211,
        "涨跌幅": 1.7852901591,
        "总成交量": 347442782,
        "总成交额": 3229520781,
        "股票代码": "sz002571",
        "个股-涨跌幅": 10.069,
        "个股-当前价": 6.34,
        "个股-涨跌额": 0.58,
        "股票名称": "德力股份"
        }
        ]*/


        //3.提取数据
        List<SectorSpot> insertlist = new LinkedList<>();
        for (JSONObject item : dataList) {
            SectorSpot record = new SectorSpot();
            record.setLable(item.getString("label"));//后面的接口会用到
            record.setPlate(item.getString("板块"));
            record.setCompanyNum(item.getLong("公司家数"));
            record.setAvgPrice(item.getDouble("平均价格"));
            record.setChangePrice(item.getDouble("涨跌额"));
            record.setPriceRate(item.getDouble("涨跌幅"));
            record.setTradeVolume(item.getLong("总成交量"));
            record.setTradeAmount(item.getDouble("总成交额"));

            String symbol = item.getString("股票代码");//sh300111
            record.setTop1Symbol(symbol);
            String[] arr = StrUtil.splitNumericAndAlphabet(symbol);
            if (ArrayUtils.isNotEmpty(arr) && arr.length == 2) {
                record.setTop1Code(arr[1]);//300111
            } else {
                log.error("异常数据indicator={},item={}", indicator, item.toJSONString());
            }

            record.setTop1Name(item.getString("股票名称"));
            record.setTop1Close(item.getDouble("个股-当前价"));
            record.setTop1ChangePrice(item.getDouble("个股-涨跌幅"));
            record.setTop1PriceRate(item.getDouble("个股-涨跌额"));

            record.setIsNeedAnalyze("0");
            record.setDate(strCurDate);
            record.setIndicator(indicator);//指标设置进去

            insertlist.add(record);
        }
        return insertlist;
    }

    //目标地址: http://finance.sina.com.cn/stock/sl/#area_1
    //
    //描述: 新浪行业-板块行情-成份详情, 由于新浪网页提供的统计数据有误, 部分行业数量大于统计数---------貌似也限流
    @Override
    public List<SectorDetail> stock_sector_detail(String lable, String strCurDate) {
        Map<String, Object> param = new HashMap<>();
        param.put("sector", lable);
        List<SectorDetail> dataList = requestAktools(ApiEnum.stock_sector_detail, param, SectorDetail.class);

         /*返回的数据结构如下
        [{
        "symbol": "sh600373",
        "code": "600373",
        "name": "中文传媒",
        "trade": 16.62,   //最新价 或者 收盘价
        "pricechange": -0.45,   //涨跌额
        "changepercent": -2.636,   //涨跌幅度
        "buy": 16.61,   //当前买入价格
        "sell": 16.62,  //当前卖出价格
        "settlement": 17.07,  //昨天收盘价
        "open": 17.03,
        "high": 17.3,
        "low": 16.47,
        "volume": 26107631, //成交量 但是手
        "amount": 438293536,  //成交额 单位是w元
        "ticktime": "15:00:00",  //数据时间
        "per": 11.667, //市盈率-静
        "pb": 1.257,  //市净率
        "mktcap": 2252115.900978, //总市值 单位是w
        "nmc": 2252115.900978, //流通市值 单位是w
        "turnoverratio": 1.92667 //日换手率
        }]*/

        //3.提取数据
        for (SectorDetail record : dataList) {
            record.setIsNeedAnalyze("0");
            record.setDate(strCurDate);
            record.setLable(lable);
            record.setPlate(iSectorSpotService.getLableName(lable));
        }

        return dataList;
    }

    //目标地址: http://www.szse.cn/market/product/stock/list/index.html
    //
    //描述: 深证证券交易所股票代码和股票简称数据
    @Override
    public List<InfoSzNameCode> stock_info_sz_name_code() {
        List<JSONObject> dataList = requestAktools(ApiEnum.stock_info_sz_name_code, null, JSONObject.class);
        /*返回的数据结构如下
         [{
         "板块": "主板",
         "A股代码": "000001",
         "A股简称": "平安银行",
         "A股上市日期": "1991-04-03",
         "A股总股本": "19,405,918,198",
         "A股流通股本": "19,405,534,450",
         "所属行业": "J 金融业"
        }
        ]*/
        List<InfoSzNameCode> insertlist = new LinkedList<>();
        for (JSONObject item : dataList) {
            InfoSzNameCode record = new InfoSzNameCode();
            String code = item.getString("A股代码");
            record.setPlate(item.getString("板块"));
            record.setCode(code);
            record.setName(item.getString("A股简称"));
            record.setIndustry(item.getString("所属行业"));

            Long floatingStock = null;
            Long totalShareCapital = null;
            try {
                floatingStock = StrUtil.financeNumToLong(item.getString("A股流通股本"));
                totalShareCapital = StrUtil.financeNumToLong(item.getString("A股总股本"));
            } catch (Exception e) {
                log.error("A股流通股本或者A股总股本转换异常,data={}", item.toJSONString(), e);
            }

            record.setTotalShareCapital(totalShareCapital);
            record.setFloatingStock(floatingStock);

            String strDateTime = item.getString("A股上市日期");//1999-11-10
            record.setListingTime(strDateTime);
            record.setIsNeedAnalyze("0");
            insertlist.add(record);
        }
        return insertlist;
    }

    //目标地址: 上海证券交易所
    //
    //描述: 上海证券交易所股票代码和简称数据
    @Override
    public List<InfoShNameCode> stock_info_sh_name_code() {
        List<JSONObject> dataList = requestAktools(ApiEnum.stock_info_sh_name_code, null, JSONObject.class);
        /*返回的数据结构如下
        [{
        "证券代码": "600000",
        "证券简称": "浦发银行",
        "公司全称": "上海浦东发展银行股份有限公司",
        "上市日期": "1999-11-10T00:00:00.000"
        }]*/


        //3.提取数据
        List<InfoShNameCode> insertlist = new LinkedList<>();
        for (JSONObject item : dataList) {
            InfoShNameCode record = new InfoShNameCode();
            String code = item.getString("证券代码");
            record.setCode(code);
            record.setName(item.getString("证券简称"));
            record.setCompanyName(item.getString("公司全称"));

            String strDateTime = item.getString("上市日期");//1999-11-10T00:00:00.000
            record.setListingTime(strDateTime.substring(0, 10));//1999-11-10

            insertlist.add(record);
        }
        return insertlist;
    }


    //目标地址: http://www.szse.cn/market/product/stock/list/index.html
    //
    //描述: 北京证券交易所股票代码和股票简称数据
    @Override
    public List<InfoBjNameCode> stock_info_bj_name_code() {
        List<JSONObject> dataList = requestAktools(ApiEnum.stock_info_bj_name_code, null, JSONObject.class);
        /*返回的数据结构如下
         [ {
            "证券代码": "430017",
            "证券简称": "星昊医药",
            "总股本": 122577200,
            "流通股本": 63055240,
            "上市日期": "2023-05-31T00:00:00.000",
            "所属行业": "医药制造业",
            "地区": "北京市",
            "报告日期": "2023-07-28T00:00:00.000"
         }
        ]*/
        List<InfoBjNameCode> insertlist = new LinkedList<>();
        for (JSONObject item : dataList) {
            InfoBjNameCode record = new InfoBjNameCode();
            record.setCode(item.getString("证券代码"));
            record.setName(item.getString("证券简称"));
            record.setIndustry(item.getString("所属行业"));

            Long floatingStock = null;
            Long totalShareCapital = null;
            try {
                floatingStock = StrUtil.financeNumToLong(item.getString("流通股本"));
                totalShareCapital = StrUtil.financeNumToLong(item.getString("总股本"));
            } catch (Exception e) {
                log.error("bj股流通股本或者bj股总股本转换异常,data={}", item.toJSONString(), e);
            }

            record.setTotalShareCapital(totalShareCapital);
            record.setFloatingStock(floatingStock);

            String strDateTime = item.getString("上市日期");//1999-11-10T00:00:00.000
            if (strDateTime != null && strDateTime.length() >= 10) {
                strDateTime = strDateTime.substring(0, 10);//1999-11-10
            }
            record.setListingTime(strDateTime);
            record.setIsNeedAnalyze("0");
            insertlist.add(record);
        }
        return insertlist;
    }

    //目标地址: http://webapi.cninfo.com.cn/#/company
    //
    //描述: 巨潮资讯-个股-公司概况---------部分股票数据拉取不到
    @Override
    public ProfileCninfo stock_profile_cninfo(String code) {
        Map<String, Object> param = new HashMap<>();
        param.put("symbol", code);
        List<JSONObject> dataList = requestAktools(ApiEnum.stock_profile_cninfo, param, JSONObject.class);
        if (CollectionUtils.isEmpty(dataList)) {
            log.info("返回为空stock_profile_cninfo,code={}", code);
        }
        /*返回的数据结构如下
        [
        {
        "公司名称": "平安银行股份有限公司",
        "英文名称": "Ping An Bank Co., Ltd.",
        "曾用简称": "S深发展Ａ>> 深发展Ａ",
        "A股代码": "000001",
        "A股简称": "平安银行",
        "B股代码": null,
        "B股简称": null,
        "H股代码": null,
        "H股简称": null,
        "入选指数": "ESG 300,分析师指数,国证Ａ指,沪深300,巨潮100,巨潮大盘,深成指R,深市精选,深证100,深证100R,深证300,深证成指,深证责任",
        "所属市场": "深交所主板",
        "所属行业": "货币金融服务",
        "法人代表": "谢永林",
        "注册资金": 1940591.8198,
        "成立日期": "1987-12-22",
        "上市日期": "1991-04-03",
        "官方网站": "bank.pingan.com",
        "电子邮箱": "PAB_db@pingan.com.cn",
        "联系电话": "0755-82080387",
        "传真": "0755-82080386",
        "注册地址": "广东省深圳市罗湖区深南东路5047号",
        "办公地址": "广东省深圳市深南东路5047号；广东省深圳市福田区益田路5023号平安金融中心B座",
        "邮政编码": "518001",
        "主营业务": "办理人民币存、贷、结算、汇兑业务；人民币票据承兑和贴现；各项信托业务；经人民银行批准发行或买卖人民币有价证券；外汇存款、汇款；境内境外借款；在境内境外发行或代理发行外币有价证券外汇存款、汇款、境内境外汇借款等。",
        "经营范围": "（一）吸收公众存款；（二）发放短期、中期和长期贷款；（三）办理国内外结算；（四）办理票据承兑与贴现；（五）发行金融债券；（六）代理发行、代理兑付、承销政府债券；（七）买卖政府债券、金融债券；（八）从事同业拆借；（九）买卖、代理买卖外汇；（十）从事银行卡业务；（十一）提供信用证服务及担保；（十二）代理收付款项及代理保险业务；（十三）提供保管箱服务；（十四）结汇、售汇业务；（十五）离岸银行业务；（十六）资产托管业务；（十七）办理黄金业务；（十八）财务顾问、资信调查、咨询、见证业务；（十九）经有关监管机构批准的其他业务。",
        "机构简介": "深圳发展银行股份有限公司系在对中华人民共和国深圳经济特区内原6家农村信用社进行股份制改造的基础上设立的股份制商业银行。1987年5月10日以自由认购的形式首次向社会公开发售人民币普通股,于1987年12月22日正式设立。1988年4月7日，本行普通股在深圳经济特区证券公司首家挂牌公开上市。深发展股东大会以及平安银行股份有限公司于2012年2月9日召开的2012年第一次临时股东大会分别审议通过了深发展吸收合并平安银行的方案的议案以及深发展与平安银行签署吸收合并协议的议案。深圳发展银行股份有限公司于2012年2月9日召开的2012年第一次临时股东大会审议通过了《深圳发展银行股份有限公司关于更名的议案》，同意本公司的中文名称由“深圳发展银行股份有限公司”变更为“平安银行股份有限公司”。中国银行业监督管理委员会于2012年4月24日以《中国银监会关于深圳发展银行吸收合并平安银行的批复》（银监复〔2012〕192号）批准了本次吸收合并。2012年7月27日本公司在深圳市市场监督管理局办理完毕相关变更手续，并取得新的《企业法人营业执照》。证券简称自2012年8月2日由“深发展A”变更为“平安银行”。"
        }
        ]*/

        //3.提取数据
        List<ProfileCninfo> insertlist = new LinkedList<>();
        for (JSONObject item : dataList) {
            ProfileCninfo record = new ProfileCninfo();
            record.setCode(item.getString("A股代码"));
            record.setName(item.getString("A股简称"));
            record.setCompanyName(item.getString("公司名称"));

            record.setListingTime(item.getString("上市日期"));//1999-11-10
            record.setEstablishTime(item.getString("成立日期"));//1999-11-10

            record.setRegisterAddress(item.getString("注册地址"));
            record.setOfficeAddress(item.getString("办公地址"));

            record.setIndustry(item.getString("所属行业"));
            record.setMainBusiness(item.getString("主营业务"));
            record.setBusinessScope(item.getString("经营范围"));
            record.setLegalPersonName(item.getString("法人代表"));
            record.setRegisterCapital(item.getDouble("注册资金"));
            record.setExchangeMarket(item.getString("所属市场"));

            insertlist.add(record);
        }

        if (insertlist.size() > 0) {
            return insertlist.get(0);
        } else {
            return null;
        }
    }

    //返回交易日信息
    @Override
    public List<String> tool_trade_date_hist_sina() {
        List<JSONObject> dataList = requestAktools(ApiEnum.tool_trade_date_hist_sina, null, JSONObject.class);
        if (CollectionUtils.isEmpty(dataList)) {
            log.info("返回为空tool_trade_date_hist_sina");
        }
        /*返回的数据结构如下
        [
            {
                "trade_date": "1990-12-19T00:00:00.000"
            },
            {
                "trade_date": "1990-12-20T00:00:00.000"
            }
        ]*/

        //3.提取数据
        List<String> insertlist = new LinkedList<>();
        for (JSONObject item : dataList) {
            String strDate = item.getString("trade_date").substring(0, 10);
            insertlist.add(strDate);
        }
        Collections.sort(insertlist);  //执行排序

        if (insertlist.size() > 0) {
            return insertlist;
        } else {
            return null;
        }
    }
}
